iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
Mobile Development

Android studio 30天新手筆記系列 第 10

Day10-Android新手筆記-ProgressBar與ProgressBar客製化

  • 分享至 

  • xImage
  •  

ProgressBar

ProgressBar可用於資料儲存或下載期間的回饋反應,或是當使用者必須知道當前進度時,都可以透過ProgressBar來達成簡易的反饋,舉一個常見且我覺得相近的例子,下載檔案時會看見一條進度條與當前的%數,這一類就可使用ProgressBar來實現。

ProgressBar有兩種基礎型態,分別為長條型與環形。本篇前半段將介紹兩種型態的基礎使用方法。

這是ProgressBar基本屬性架構:

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"/>

android:max="100" 用於設定整條ProgressBar的最大值
android:progress="50" 用於設定初始化時ProgressBar的值

ProgressBar操控基礎型態主要透過「style="?android:attr/progressBarStyleHorizontal"」去做切換,常見的型態如下:

長條圖:
?android:attr/progressBarStyleHorizontal

@android:style/Widget.ProgressBar.Horizontal

環形圖:
(放在一起的表示只有大小不同)
?android:attr/progressBarStyleLarge
?android:attr/progressBarStyleSmall

(放在一起的表示只有大小不同)
@android:style/Widget.ProgressBar.Large
@android:style/Widget.ProgressBar.Small
@android:style/Widget.ProgressBar.Inverse

ProgressBar 客製化

ProgressBar客製化分為長條型與環形兩種分別介紹,兩種在XML上的設定與綁定有點不相同。
首先先介紹長條形的設定,它與SeekBar的設定類似,只是少了圖示的設定,詳細操作如下:
先在Drawable建立一個XML檔,這邊為了方便解說將檔名設定為ProgressBar_style.xml,第一次使用的朋友也可以先這樣設定。接下來附上基本的XML檔:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    //ProgressBar的背景
    <item android:id="@android:id/background">
        <shape>
            <solid android:color="#4F4F4F"/>
        </shape>
    </item>

    //主要進度條的背景
    <item android:id="@android:id/progress" >
        <clip>
            <shape>
                <gradient
                    android:angle="45"
                    android:centerX="35%"
                    android:centerColor="#47A891"
                    android:startColor="#E8E8E8"
                    android:endColor="#000000"
                    android:type="linear"
                    />
            </shape>
        </clip>
    </item>

    //次要進度條的背景
    <item android:id="@android:id/secondaryProgress" >
        <clip>
            <shape>
                <gradient
                    android:angle="45"
                    android:centerX="35%"
                    android:centerColor="#47A891"
                    android:startColor="#E8E8E8"
                    android:endColor="#000000"
                    android:type="linear"
                    />
            </shape>
        </clip>

    </item>

</layer-list>

這邊主要用於設定背景(background)、主ProgressBar進度條(progress)、次級ProgressBar進度條(secondaryProgress)的客製化效果,需特別注意到item標籤後方接的android:id=""裡面所對應的ID原則上不做更動,避免發生錯誤。此外我們在設定客製化時有用到gradient等標籤,關於這個標籤的詳細用法可以到我介紹Buotton樣式文章處,那邊會有許多資訊。

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:max="100"
        android:progress="50"
        android:progressDrawable="@drawable/processbar_style"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

progressbar_style.xml設定完成後,我們到View的XML檔找到ProgressBar,並使用「android:progressDrawable=“@drawable/progressbar_style”」將我們設定的客製化XML與ProgressBar綁定。

接下來介紹環形的客製化,詳細操作如下:
先在Drawable建立一個XML檔,這邊為了方便解說將檔名設定為progressbar_color.xml,第一次使用的朋友也可以先這樣設定。接下來附上基本的XML檔:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="720" >
    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="false" >
        <gradient
            android:centerColor="#35D0FF"
            android:centerY="0.50"
            android:endColor="#FB0303"
            android:startColor="#FFFFFF"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>

其中 「android:toDegrees="720"」,裡面的數字代表環形在特定間內會跑幾圈,數字越大循環越快。

<ProgressBar
        android:id="@+id/progressBar7"
        style="@android:style/Widget.ProgressBar.Inverse"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:indeterminateDrawable="@drawable/progressbar_color"
        android:layout_marginTop="50dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/progressBar6"
        />

progressbar_color.xml設定完成後,我們到View的XML檔找到ProgressBar,並使用「android:indeterminateDrawable="@drawable/progressbar_color"」將我們設定的客製化XML與ProgressBar綁定。


上一篇
Day9-Android新手筆記-SeekBar與SeekBar樣式客製化
下一篇
Day11-Android新手筆記-Log基本介紹
系列文
Android studio 30天新手筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言